Hoppa till huvudinnehåll

Live MQTT-kontroll

tips

Den live MQTT-kontrollen är avsedd för livekontroll. För att skicka scheman i förväg, se Schemalagd MQTT-kontroll istället.

Den här guiden hjälper dig att konfigurera MQTT på din SmartgridOne Controller för att fjärrstyra och övervaka batteri- och solpanelinstallationssystem.

Vad du behöver

  1. SmartgridOne Controller med internetuppkoppling.
  2. MQTT-behörigheter: Detta kan begäras genom att skicka ett e-postmeddelande till support@eniris.be.
  3. Python-utvecklingsmiljö (eller någon annan MQTT-klient). Denna guide använder ett grundläggande exempel skrivet i Python för att få dig att komma igång med MQTT och skicka kommandon. Vi rekommenderar att använda Python för enkelhetens skull, men vilken annan MQTT-klient som helst stöds.

Extra information

MQTT är ett snabbt kommunikationsprotokoll över internet. Det är ett publicera/prenumerera-meddelandesystem, vilket möjliggör en direktkoppling mellan din maskin och SmartgridOne Controller. Dina tillgångar klassificeras i grupper av sol, batteri, EV, och HVAC.

Första konfiguration (Startpunkt för nya användare)

Jag har en SmartgridOne Controller som jag vill konfigurera för MQTT fjärrkontroll.

1. Kontrollera ditt nätverk

Se till att ditt nätverk tillåter mqtt-nätverkstrafik över port 1883. Du kan göra detta med kommandot:

nc -zv mqtt.eniris.be 1883

När detta kommando inte är tillgängligt kan du alternativt ladda ner och köra denna python-kod.

Vid osäkerhet, konsultera din nätverksingenjör eller använd tillfälligt din telefons 4G/5G-hotspot när anslutningsfel uppstår.

anteckning

När port 1883 inte är tillgänglig från ditt nätverk erbjuder vi en reserv på port 80. Detta kan konfigureras i din MQTT-klient i ett senare steg i denna manual.

2. Lägg till dina enheter

Logga in på installationsgränssnittet och se till att enheterna läggs till i SmartgridOne Controller.

3. Lägg till det externa MQTT-signalet

Image 1
Image 1
Image 1
Image 1

4. Aktivera MQTT fjärrsignal

Fältet 'VPP ID' måste lämnas tomt.

Fallback-mekanismens tidsgräns berättar för SmartgridOne Controller hur länge den ska vänta på nya kommandon. När SmartgridOne Controller slutar få kommandon tar den automatiskt upp standardstrategin efter denna tidsgräns.

Välj sedan alla enheter som du vill inkludera i MQTT fjärrkontroll.

Image 1
Image 1

5. Fjärrsignalen har lagts till

MQTT fjärrkontrollgränssnittet har nu aktiverats på SmartgridOne Controller.

Vi är nu redo att skicka några grundläggande kommandon med hjälp av ett enkelt exempel. Statuskolumnen berättar för dig om något kommando är aktivt.

Image 1

Python demoskick

En bra första startpunkt skulle vara att testa din nykonfigurerade integration med ett enkelt exempel.

Denna testkod gör ett enkelt jobb med att kontinuerligt skicka följande kommandon:

  • Batteri: Ladda vid 5 kW
  • Sol: Ställ in effekten på 0 kW

SmartgridOne Controller svarar kontinuerligt med ett 'feedback'-meddelande som innehåller de observerade nät- och tillgångsenergivärdena. Denna funktion ingår också i detta exempel.

Ladda ner filen nedan i din föredragna Python IDE. Fyll i ditt serienummer och MQTT-behörigheter och kör skriptet:

När ovanstående lyckas kan du fortsätta med att skicka andra typer av kommandon. Alla kommandon beskrivs i vår MQTT fjärrkontrollsdocumetation.

MQTT dokumentation för att skicka kommandon

Detta avsnitt beskriver MQTT-meddelandets format och payloadkrav för fjärrstyrning av effektpolicies på enheter inom SmartgridOne Controller's nätverk.

MQTT Tema

MQTT-temat som används för att skicka kommandon är strukturerat enligt följande:

standard1/rp_one_s/remoteControlMetrics/'controller SN'

Där 'controller SN' ska ersättas med det aktuella serienumret på den SmartgridOne Controller som du avser att styra.

MQTT Payload Struktur

Kommandon skickas som JSON-payloads. Payload-strukturen är utformad för att specificera olika storaffärspolicyer och inställningar för olika komponenter av det smarta nätet. Här är en översikt av payloaden med detaljerade fälbeskrivningar:

{
"extraTags": {
"nodeId": "<Controller SN>_site_0"
},
"time": "<Unix Timestamp>",
"fields": {
"<Component Policy>": "<Policy Type>",
"<Component Power Setpoint>": <Setpoint i watt>
}
}

Fältsbeskrivning

tips

Flera enhetstyper (t.ex. batterier + sol) kan styras samtidigt.

  • extraTags (Objekt):
    • nodeId (Sträng): En unik identifierare för noden inom SmartgridOne Controller's nätverk. Detta motsvarar ditt serienummer, följt av '_site_0' för de flesta SmartgridOne Controller-enheter.
  • time (Heltal): Unix-tidsstämpel i sekunder som visar tidpunkten när meddelandet skickas.
  • fields (Objekt):
    • <Komponent>_policy (Sträng): Policytyp för komponenten. Det är valfritt och om det inte specificeras faller systemet tillbaka på SmartgridOne Controller's standardinställning.
    • <Komponent>_power_setpoint_w (Flyttal): Önskad effektinställning i watt för komponenten. Detta är valfritt och endast relevant om en motsvarande policy specificeras.

Komponenter och Policies

info

Tillgångar av samma typ (t.ex. två batterier) kommer att kombineras som en komponent. Till exempel, när två 5 kWh batterier är installerade, kommer det att behandlas som ett 10 kWh batteri.

Varje komponent i fields-objektet kan inkludera en policy och en effektinställning. Följande komponenter kan styras:

  • solar_policy och solar_power_setpoint_w:

    • Styr solkraftproduktionen och inställningen. Stödda policyer:
      • Policy inställning: Ställ in den maximala effekten som produceras av alla anslutna solinstallationer tillsammans. Fältet solar_power_setpoint_w bör ställas in på produktionskraftgränsen i watt.
      • Policy begränsning på inmatning: Producera med full kraft, följande nuvarande nätgränser.
      • Policy kostnad: Möjliggör kostnadsminimering på dag-före-priser (EPEX Spot-marknaden) för solproduktionen. När negativa inmatningspriser uppstår, minskar vi produktionen till egen konsumtion. När både uttags- och inmatningsprisen är negativa, stänger vi av alla solinstallationer. Fältet solar_power_setpoint_w ignoreras.
      • Policy av: Inaktiverar all interaktion för alla solresurser. Varning: gränser bevakas inte i detta läge. Fältet solar_power_setpoint_w ignoreras.
  • storage_policy och storage_power_setpoint_w:

  • Kontrollerar energilagringssystemets policy och effektutladdnings- eller laddningshastighet.

    • Policynivå: Ställ in den totala laddningskraften (positiv nivå) eller urladdningskraften (negativ nivå) för gruppen av batterier. När flera batterier är anslutna delas nivån upp av tillgänglig laddnings-/urladdningskraft för att jämnt belasta batterierna. Fältet storage_power_setpoint_w är inställt på önskad batterikraft.
    • Policy kostnad: Möjliggör kostnadsoptimering för dag före-pris (EPEX Spot-marknad) på batterierna, genom att ladda under billiga timmar och använda energin under dyra timmar. Fältet storage_power_setpoint_w ignoreras.
    • Policy självkonsumtion: Möjliggör en enkel självkonsumtionsalgoritm på batterierna. Överskott av solproduktion lagras i batteriet under dagen, och när solen inte lyser tas energi från batteriet. Fältet storage_power_setpoint_w ignoreras.
    • Policy av: Inaktiverar all interaktion för alla batteritillgångar. Varning: gränser övervakas inte i detta läge. Fältet storage_power_setpoint_w ignoreras.
  • heat_pump_policy:

    • Slår på/av värmepumpssystem. Minimi- och maximala driftstider kommer alltid att respekteras.
      • Policy kostnad: Möjliggör kostnadsoptimering för dag före-pris (EPEX Spot-marknad) på värmepumparna. Den lokala dynamiska prissättningsalgoritmen avgör de bästa driftstidsperioderna.
      • Policy självkonsumtion: Slår på värmepumparna om ett överskott av solenergi produceras.
      • Policy strömav: Stänger av värmepumparna.
      • Policy strömn: Slår på värmepumparna.
  • switched_load_policy:

    • Slår på/av relästyrda system. Detta kan vara det inbyggda reläet eller nätverksanslutna reläer.
      • Policy kostnad: Möjliggör kostnadsoptimering för dag före-pris (EPEX Spot-marknad) på reläet.
      • Policy självkonsumtion: Slår på reläet om ett överskott av solenergi produceras.
      • Policy strömav
      • Policy strömn
  • variable_power_load_policy och variable_power_load_power_setpoint_w:

    • Hanterar den elektriska fordons kraftkonsumeringspolicy och nivån.
      • Policynivå: Ställ in den totala laddningskraften för gruppen av elfordon. Fältet variable_power_load_power_setpoint_w är inställt på den önskade laddningskraften.
      • Policy kostnad: Möjliggör kostnadsoptimering för dag före-pris (EPEX Spot-marknad) på batterierna, genom att ladda under billiga timmar. Fältet variable_power_load_power_setpoint_w ignoreras.
      • Policy självkonsumtion: Möjliggör laddning om ett överskott av solenergi produceras. Fältet variable_power_load_power_setpoint_w ignoreras.
      • Policy av: Inaktiverar all interaktion för alla elfordonstillgångar. Fältet variable_power_load_power_setpoint_w ignoreras.
  • site_policy och site_power_setpoint_w:

    • Hanterar stället exportgränser.
      • Policy export: Ställ in exportgränsen för platsen. Fältet site_power_setpoint_w är inställt på exportgränsen.
      • Policy standard: Återställer ställets gräns till den standardiserade exportkraften, inställd i kontrollerkonfigurationen.

Enhetskontroll

Specifika enheter kan också styras, istället för grupper av enheter baserat på deras typer. Meddelandet är identiskt strukturerat:

  • nodeId_policy och nodeId_power_setpoint_w
info

När två kommandon skickas till samma tillgång (t.ex. ett enhetsspecifikt kommando till en solomvandlare, och ett kommando till alla sol-enheter), kommer enhetsspecifik kontroll metod att prioriteras över enhetstypkontrollen.

Fallbackbeteende

För varje komponent, om _policy och _power_setpoint_w inte anges, kommer systemet automatiskt att använda fallbackpolicyn som är konfigurerad i SmartgridOne Controller. Detta säkerställer att varje enhet eller enhetsgrupp fungerar säkert och fortsätter att fungera även om specifika instruktioner inte tillhandahålls.

Om inget kommando skickas efter 60 sekunder (eller konfigureringstid), kommer standardpolicys för tillgångar att återaktiveras.

Avbryt befintliga kommandon och återgå till lokala kontrollmetoder

Ett aktivt kommando kan avbrytas genom att skicka ett fallback-kommando meddelande.

Fallback-kommando

Ett fallback-kommando kommer att avbryta det befintliga kommandot omedelbart och SmartgridOne Controller kommer att ta över kontrollen av installationen. Den verkställda policyn beror på vad som är inställt i SmartgridOne Controller Inställningar.

Detta kan också användas i fall där en sekundär kontrollsignal, såsom ett schema, används som fallback.

Meddelandexempel:

{
"extraTags": {
"nodeId": "<Controller SN>_site_0"
},
"time": "<Unix Timestamp>",
"fields": {
"<Component Policy>": "fallback",
}
}

Tomt kommando

Ett tomt kommando kan skickas när som helst för att hämta platsinformation. Detta kommer inte att avbryta det aktuella kommandot och kommer inte att skriva över kommandon från sekundära kontrollsignaler med lägre prioriteringar.

Det tomma kommandot är strukturerat enligt följande:

{
"extraTags": {
"nodeId": "<Controller SN>_site_0"
},
"time": "<Unix Timestamp>",
"fields": {}
}

Exempel på payload

Nedan finns ett exempel på en payload för att ställa in olika policys och nivåer:

{
"extraTags": {
"nodeId": "OM12404080000000000_site_0"
},
"time": 1714652046,
"fields": {
"solar_policy": "setpoint",
"solar_power_setpoint_w": 5000,
"storage_policy": "setpoint",
"storage_power_setpoint_w": -5000
}
}

I detta exempel är solkraften inställd på att generera upp till 5000 watt, och energilagringssystemet är inställt på att antingen ladda eller urladda med en hastighet av 5000 watt, beroende på tecknet på nivåvärdet. Om antingen solar_policy eller storage_policy utelämnades, skulle den respektive enheten återgå till standardinställningarna som bestäms av SmartgridOne Controller.

MQTT-dokumentation för att ta emot feedback

Detta avsnitt beskriver strukturen och innehållet i feedbackmeddelandena som skickas av SmartgridOne Controller via MQTT. Dessa meddelanden publiceras till ämnet standard1/outbound/remoteControlMetrics/feedback/<Controller SN> efter att ett kommando har bearbetats.

MQTT-feedbackämne

Feedbackens MQTT-ämne är strukturerat som följer:

standard1/outbound/remoteControlMetrics/feedback/<Controller SN>

Där <Controller SN> ska ersättas med serie numret för SmartgridOne Controller som skickar feedbacken.

MQTT-feedbackpayloadstruktur

anteckning

Alla tillgångar grupperas efter sin typ. Detta innebär att två individuella solinstallationer på 3 kW kommer att behandlas som en 6 kW tillgång.

Feedbackmeddelanden formateras som JSON-payloads. Dessa payloads ger detaljerad feedback om systemets tillstånd efter att settLevel-kommandona har tillämpats, med hänsyn till nät-/enhetsgränser. Nedan presenteras strukturen för feedbackpayloaden med beskrivningar av dess fält:

{
"time": "<Unix Timestamp>",
"data": {
"state": {
"grid": {
"active_power_W": <Grid Active Power in Watts>,
"today_imported_energy_Wh": <Grid Imported Energy in Watt-hours>,
"today_exported_energy_Wh": <Grid Exported Energy in Watt-hours>,
"import_limit_W": <Grid Import Limit in Watts>,
"export_limit_W": <Grid Export Limit in Watts>,
},
"vpp_id": "<Virtuell Kraftverksidentifierare>",
"storage": {
```json
"energy_stored_Wh": <Energilagring i Watt-timmar>,
"energy_capacity_Wh": <Total energikapacitet i Watt-timmar>,
"mean_soc_perc": <Medelvärde av laddningsstatus i procent>,
"active_power_W": <Aktiv effekt i Watt>,
"executed_power_W": <Effektinställning skickad till enheter i Watt>,
"executed_policy": <Policy utförd av styrenheten>,
"max_charge_power_W": <Maximal laddningseffekt i Watt>,
"max_discharge_power_W": <Maximal urladdningseffekt i Watt>,
"today_charged_Wh": <Energi laddad idag i Watt-timmar>,
"today_discharged_Wh": <Energi urladdad idag i Watt-timmar>,
"nr_devices": <Antal installerade kontrollerade lagringsenheter>
},
"solar": {
"active_power_W": <Solenergi aktiv effekt i Watt>,
"executed_power_W": <Effektinställning skickad till enheter i Watt>,
"executed_policy": <Policy utförd av styrenheten>,
"capacity_W": <Solenergi kapacitet i Watt>,
"today_energy_Wh": <Energi producerad idag i Watt-timmar>,
"nr_devices": <Antal installerade kontrollerade solenergi-enheter>
},
"heat_pump": {
"executed_policy": <Policy utförd av styrenheten>,
"operation_modes": <Värmepumps driftlägen>,
"executed_power_W": <Effektinställning skickad till enheter i Watt>,
"nr_devices": <Antal installerade kontrollerade värmepumpsenheter>
},
"switched_load": {
"executed_policy": <Policy utförd av styrenheten>,
"devices_on": <Antal aktiverade enheter>,
"devices_off": <Antal avstängda enheter>,
"executed_power_W": <Effektinställning skickad till enheter i Watt>,
"nr_devices": <Antal installerade kontrollerade omkopplade laster>
},
"variable_load": {
"executed_policy": <Policy utförd av styrenheten>,
"executed_power_W": <Effektinställning skickad till enheter i Watt>,
"active_power_W": <Effekt av enheten i Watt>,
"ev_requiring_charge": <Behöver elbilen laddning>,
"currentL1_A": <Ström av enheten på fas 1 i ampere>,
"currentL2_A": <Ström av enheten på fas 2 i ampere>,
"currentL3_A": <Ström av enheten på fas 3 i ampere>,
"executed_current_A": <Ströminställning skickad till enheter i ampere>,
"today_charged_Wh": <Energi laddad idag i Watt-timmar>,
"today_discharged_Wh": <Energi urladdad idag i Watt-timmar>,
"total_charged_Wh": <Totalt energi laddad i Watt-timmar>,
"total_discharged_Wh": <Totalt energi urladdad i Watt-timmar>,
"min_charge_current_A": <Minimalt laddningsström i ampere>,
"max_charge_current_A": <Maximalt laddningsström i ampere>,
"allow_zero_current": <Stöder laddaren paus?},
}
},
"response_code": <Svarskod>
},
"fields": {},
"requestTime": "<Unix-tidsstämpel>",
"time": "<Unix-tidsstämpel>",
"siteNodeId": "<Controller SN>_site_0"
}

Fältsbeskrivning

  • time (Heltal): Unix tidsstämpel som indikerar tiden när feedbackmeddelandet skickades.
  • fields (Objekt):
    • state (Objekt):
      • vpp_id (Sträng): Identifierare för den virtuella kraftverket kopplad till denna enhet.
      • grid (Objekt):
        • active_power_W (Float): Representerar den aktuella aktiva effekten på nätet i watt.
        • today_imported_energy_Wh (Float): Den totala energi som tagits från nätet idag i watt-timmar. Obs: Idag anges i UTC tid.
        • today_exported_energy_Wh (Float): Den totala energi som injicerats tillbaka i nätet idag i watt-timmar. Obs: Idag anges i UTC tid.
        • import_limit_W (Float): Nätets importgräns i watt,
        • export_limit_W (Float): Nätets exportgräns i watt,
      • storage (Objekt):
        • energy_stored_Wh (Float): Aktuell mängd energi lagrad i watt-timmar.
        • energy_capacity_Wh (Float): Total energikapacitet för lagringssystemet i watt-timmar.
        • mean_soc_perc (Float): Laddningsstatus som en procentandel. Detta är det vägda genomsnittet bland alla anslutna batterier. (när flera batterier är anslutna: t.ex. batteri 'a' har en energikapacitet på 10 kWh och en laddningsstatus på 20%; batteri 'b' har en energikapacitet på 20 kWh och laddningsstatus på 50%, så är medel_soc_perc 40%)
        • active_power_W (Float): Aktuell aktiv effekt för lagringssystemet i watt, som visar laddnings- eller urladdningshastighet.
        • max_charge_power_W (Float): Maximal effekt vid vilken lagringen kan laddas.
        • max_discharge_power_W (Float): Maximal effekt vid vilken lagringen kan urladdas.
        • executed_power_W (Float): Summan av total kraft som begärts att (urladdas) från lagringsanläggningarna, som skickas ut av vår kontrollalgoritm. Endast tillämpligt om 'follow_setpoint'-policy är aktiv.
        • executed_policy (Str): De policyer som har tillämpats på kontrollerbara enheter.
        • today_charged_Wh (Float): Den totala energi som laddats in i de kontrollerbara batterianordningarna idag. Obs: Idag anges i UTC tid.
        • today_discharged_Wh (Float): Den totala energi som urladdats från de kontrollerbara batterianordningarna idag. Obs: Idag anges i UTC tid.
        • nr_devices (Int): Antal kontrollerbara batterianordningar.
      • solar (Objekt):
        • active_power_W (Float): Aktuell aktiv effekt genererad av solpaneler i watt.
        • capacity_W (Float): Total kapacitet för solenergiproduktionssystemet i watt.
        • executed_power_W (Float): Summan av total kraft som begärts från solenergi-anläggningarna, som skickas ut av vår kontrollalgoritm. Endast tillämpligt om 'follow_setpoint'-policy är aktiv.
        • executed_policy (Str): De policyer som har tillämpats på kontrollerbara enheter.
        • today_energy_Wh (Float): Den totala energi som producerats från de kontrollerbara solenergi-anläggningarna idag. Obs: Idag anges i UTC tid.
        • nr_devices (Int): Antal kontrollerbara solenergi-anläggningar.
      • heat_pump (Objekt):
        • executed_policy (Str): De policyer som har tillämpats på kontrollerbara enheter.
        • operation_modes (Str): Driftläge för värmepumpen (Blockerande läge, Boost-läge, Självstyrningsläge)
        • executed_power_W (Float): Den förväntade effekten som den aktuellt använder.
        • nr_devices (Int): Antal kontrollerbara värmepumpar.
      • switched_load (Objekt):
  • executed_policy (Str): De policyer som har tillämpats på de kontrollerbara enheterna,
  • executed_power_W (Float): Summan av total effekt som begärts från tillgångarna, som skickas ut av vår kontrollalgoritm.
  • active_power_W (Float): Representerar den aktuella aktiva effekten på nätet i watt.
  • ev_requiring_charge (Bool): Kräver elbilen laddning. (Är en bil ansluten).
  • currentL1_A (Float): Strömmen av enheten på fas 1 i Ampere.
  • currentL2_A (Float): Strömmen av enheten på fas 2 i Ampere.
  • currentL3_A (Float): Strömmen av enheten på fas 3 i Ampere.
  • executed_current_A (Float): Summan av total ström som begärts från tillgångarna, som skickas ut av vår kontrollalgoritm.
  • today_charged_Wh (Float): Den energi som laddats in i elbilsladdaren/de idag. Obs: Idag ges i UTC-tid.
  • today_discharged_Wh (Float): Den energi som laddats ur elbilsladdaren/de idag. Obs: Idag ges i UTC-tid.
  • total_charged_Wh (Float): Den totala energin som har laddats in i elbilsladdaren/de.
  • total_discharged_Wh (Float): Den totala energin som har laddats ur elbilsladdaren/de.
  • min_charge_current_A (Float): Minimiström vid vilken elbilen kan laddas.
  • max_charge_current_A (Float): Maximiström vid vilken elbilen kan laddas.
  • allow_zero_current (Bool): Tillåter elbilsladdaren att pausa.
  • nodeId (Object):
    • Om ett nodeId ingår i kommandot, kommer feedbacken att innehålla det motsvarande tillståndet för enheten.
  • response_code (Int):
    • Indikerar status för operationen. Ett response_code på 0 betyder vanligtvis framgång, medan andra värden kan indikera olika typer av fel eller statusinformation (dessa bör detaljeras i en separat referens).

Exempel på Feedback Payload

Här är ett exempel på ett feedbackmeddelande efter ett kommando för att ställa in olika effektinställningar:

Image 1

Denna feedback visar systemets aktuella operativa tillstånd efter genomförandet av inställningarna och indikerar effekterna på solenergi, lagring och samverkan med nätet.

Stödda MQTT-versioner och beteende vid obehöriga ämnen

När du använder MQTT är det viktigt att beakta skillnaderna i specifikationer mellan versionerna 3.1, 3.1.1 och 5.0, särskilt angående brokerens beteende när klienter publicerar till obehöriga ämnen.

Enligt MQTT 3.1.1-specifikationen (se OASIS MQTT 3.1.1 Specification, avsnitt MQTT-3.3.5-2) måste en broker avsluta anslutningen så snart en klient skickar en PUBLISH till ett ämne för vilket den inte har behörighet. Detta beteende kan leda till oväntade bortkopplingar för klienter som försöker publicera till felkonfigurerade eller obehöriga ämnen.

I MQTT 3.1 finns inte detta krav. När en klient publicerar till ett obehörigt ämne under denna version ignorerar broker vanligtvis meddelandet (tyst bortfall) utan att avsluta anslutningen. Detta gör MQTT 3.1 i vissa fall mer lämpligt när robusthet mot konfigurationsfel eller tillfälligt saknade behörigheter är viktigare än strikt säkerhetsgenomförande.

Även om MQTT 5.0 introducerar möjligheten att arbeta med anledningkoder (såsom PUBACK med en avböjningsorsak), kräver detta stöd på både klient- och server-sidan. Att migrera till MQTT 5.0 innebär därför ytterligare implementeringsinsats.

Konsekvenser av att ignorera kompatibilitet: Om en klient ansluter med MQTT 3.1.1 och försöker publicera meddelanden till obehöriga ämnen kommer broker att avsluta sessionen abrupt. Detta kan leda till instabilitet, förlust av anslutning eller ökad belastning på grund av upprepade återanslutningsförsök.

Rekommenderad metod: För system där klienter kan (tillfälligt) försöka publicera till obehöriga ämnen, eller där felhantering inte strikt genomförs, rekommenderar vi att använda MQTT 3.1. Detta säkerställer stabilare anslutningar och undviker oavsiktliga bortkopplingar under drift.